package fr.miage.orleans.aar.modele;

import java.util.Objects;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(schema = Modele.SCHEMA_NAME)
public class Joueur extends Personne {


	public Joueur getValueObject()
	{
		Joueur newjoueur = new Joueur();
		newjoueur.posteJoueur = this.posteJoueur;
		newjoueur.setNom(this.getNom());
		newjoueur.setPrenom(this.getPrenom());
		newjoueur.setPersonneId(this.getPersonneId());
		if(this.equipe != null)
		{
			Equipe  e= new Equipe();
			e.setNom(this.getEquipe().getNom());
			e.setEquipeId(this.getEquipe().getEquipeId());
			newjoueur.setEquipe(e);
		}
		return newjoueur;
	}


	@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
	private Equipe equipe;

	@ManyToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
	private PosteJoueur posteJoueur;

	public PosteJoueur getPosteJoueur() {
		return posteJoueur;
	}

	public void setPosteJoueur(PosteJoueur posteJoueur) {
		this.posteJoueur = posteJoueur;
	}

	private String attrJoueur;


	public String getAttrJoueur() {
		return attrJoueur;
	}

	public void setAttrJoueur(String attrJoueur) {
		this.attrJoueur = attrJoueur;
	}

	public Equipe getEquipe() {
		return equipe;
	}

	public void setEquipe(Equipe equipe) {
		this.equipe = equipe;
	}

    @Override
    public String toString() {
        return "Joueur{" + "nom=" + this.getNom() + "prenom=" + this.getPrenom() + "equipe=" + equipe + ", posteJoueur=" + posteJoueur.toString() + ", attrJoueur=" + attrJoueur + '}';
    }


    @Override
    public int hashCode() {
        int hash = 7;
        hash = 53 * hash + Objects.hashCode(this.attrJoueur);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Joueur other = (Joueur) obj;
        return (this.getPersonneId() == other.getPersonneId() && this.getPersonneId() != 0);
    }
    
        
    
        
}
